<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>面向对象高级-创建对象</title>
    <script>
        /**
         * 构造函数创建对象
         * 创建时不确定对象的属性时适用
         * 
         * 语句较多
         * 
         */
        var a = new Object()
        a.name = 'sxq'
        a.age = 25
        a.setName = function (name) {
            this.name = name
        }
        
        

        /**
         * 对象字面量创建对象
         * 语句较少，适合对象的属性确定时使用
         * 但创建多个对象，有重复代码
         */
        var p = {
            name:'苑苑',
            age:20,
            setName:function (name) {
                this.name = name
            }
        }

        /**
         * 工厂模式创建对象
         * 多次创建不产生额外语句，但返回的都是Object类型
         */
        function createPerson(name, age) {
            var obj = {
                name:name,
                age:age,
                setName:function (name) {
                    this.name = name
                }
            }
            return obj
        }

        /**
         * 构造函数+原型
         * 可以创建多种类型的对象
         */
        function Person(name, age) {
            this.name = name
            this.age = age
        }
        
        Person.prototype.setName = function (name) {
            this.name = name
        }
        
        
        var pp = new Person('yy', 27)
        pp.setName('yaunheibi')
        console.log(pp)
        
        var pc = new Person('yy',52)
        pc.setName('yuansansui')
    </script>
</head>
<body>

</body>
</html>
